

#ifndef UC_GEEXTC3D_H
#define UC_GEEXTC3D_H

#include "zgecurv3d.h"
#include "zgearc3d.h"
#include "zgevec3d.h"
#include "zgepnt3d.h"
#pragma pack (push, 8)

class UcGeLine3d;
class UcGeLineSeg3d;
class UcGeRay3d;
class UcGeEllipArc3d;
class UcGeNurbCurve3d;
class UcGeExternalCurve2d;
class UcGeExternalCurve3d;

class
GX_DLLEXPIMPORT
UcGeExternalCurve3d : public UcGeCurve3d
{
public:
    UcGeExternalCurve3d();
    UcGeExternalCurve3d(const UcGeExternalCurve3d& src);
    UcGeExternalCurve3d(void* curveDef, UcGe::ExternalEntityKind curveKind,
                            ZSoft::Boolean makeCopy = ZSoft::kTrue);

    ZSoft::Boolean isLine     () const;
    ZSoft::Boolean isRay      () const;
    ZSoft::Boolean isLineSeg  () const;
    ZSoft::Boolean isCircArc  () const;
    ZSoft::Boolean isEllipArc () const;
    ZSoft::Boolean isNurbCurve() const;
    ZSoft::Boolean isDefined  () const;

    ZSoft::Boolean isNativeCurve  (UcGeCurve3d*& nativeCurve) const;
    void           getExternalCurve (void*& curveDef) const;

    UcGe::ExternalEntityKind externalCurveKind() const;

    UcGeExternalCurve3d& set(void* curveDef, UcGe::ExternalEntityKind curveKind,
                             ZSoft::Boolean makeCopy = ZSoft::kTrue);

    UcGeExternalCurve3d& operator = (const UcGeExternalCurve3d& src);

    ZSoft::Boolean       isOwnerOfCurve   () const;
    UcGeExternalCurve3d& setToOwnCurve    ();
};

#pragma pack (pop)
#endif
